//package com.vercon.moensmart.adapter;
//
//import android.app.Activity;
//import android.content.Context;
//import android.text.TextUtils;
//import android.view.LayoutInflater;
//import android.view.View;
//import android.view.ViewGroup;
//import android.view.animation.Animation;
//import android.view.animation.AnimationUtils;
//import android.view.animation.LinearInterpolator;
//import android.view.animation.RotateAnimation;
//import android.widget.ImageView;
//import android.widget.LinearLayout;
//import android.widget.ProgressBar;
//import android.widget.TextView;
//
//import androidx.annotation.NonNull;
//import androidx.annotation.Nullable;
//import androidx.fragment.app.FragmentActivity;
//import androidx.fragment.app.FragmentManager;
//
//import com.vercon.common.room.entry.AppDataRoomInfo;
//import com.vercon.common.utils.LogUtils;
//import com.vercon.moensmart.MainApplication;
//import com.vercon.moensmart.adapter.base.BaseAdapter;
//import com.vercon.moensmart.databinding.ItemAppStoreBinding;
//import com.vercon.moensmart.utils.ToastUtils;
//
//import java.util.HashMap;
//import java.util.List;
//
//import io.reactivex.Completable;
//import io.reactivex.MaybeObserver;
//import io.reactivex.android.schedulers.AndroidSchedulers;
//import io.reactivex.disposables.CompositeDisposable;
//import io.reactivex.disposables.Disposable;
//import io.reactivex.functions.Consumer;
//import io.reactivex.schedulers.Schedulers;
//
//public class AppStoreAdapter extends BaseAdapter<ItemAppStoreBinding,AppDataRoomInfo> {
//
//    public volatile static boolean isLoading = false;//是否正在下载
//    public static boolean isSuccess = false;//是否安装成功
//    private int mProgress;
//
//    private FragmentManager mFragmentManager;
//    private HashMap<String, Integer> mHashMap;//标记下载安装状态
//
//    private final int HAVE_DOWN_LOAD = 0;//有下载
//    private final int HAVE_UPDATE = 1;//有更新
//    private final int DOWN_LOAD_ING = 2;//下载中
//    private final int INSTALL = 3;//安装中
//    private final int INSTALLED = 4;//已安装
//    private NotStorageWindow mWindow;
//
//    public AppStoreAdapter(Activity context,FragmentManager fragmentManager) {
//        super(context);
//        mHashMap = new HashMap<>();
//        isLoading = false;
//        isSuccess = false;
//        this.mFragmentManager = fragmentManager;
//    }
//
//    //"com.gitvdemo.video"
//    public void setLists(List<AppDataRoomInfo> data) {
//
//       // List<AppData> appDataList = BlogDao.getBox(AppData.class).getAll();
//        MainApplication.Companion.getContext().getAppDataBaseInstance().AppDataRoomDao().queryAllDesc()
//                .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
//                .subscribe(new Consumer<List<AppDataRoomInfo>>() {
//                    @Override
//                    public void accept(List<AppDataRoomInfo> appDataRoomInfos) throws Exception {
//                        for (AppDataRoomInfo appData : data) {
//                            AppDataRoomInfo first = isExit( appData.getPackageName(),appDataRoomInfos);
//                            if (first != null) {
//                                //已安装
//                                //v1.0.7
//                                String v = first.getActualVersion().replaceAll("v", "").replaceAll("\\.", "");
//                                String v1 = appData.getActualVersion().replaceAll("v", "").replaceAll("\\.", "");
//                                if (!v.equals(v1)) {
//                                    //有更新
//                                    mHashMap.put(appData.getPackageName(), HAVE_UPDATE);
//                                } else {
//                                    //没更新
//                                    mHashMap.put(appData.getPackageName(), INSTALLED);
//                                }
//                            } else {
//                                //可下载
//                                mHashMap.put(appData.getPackageName(), HAVE_DOWN_LOAD);
//                            }
//                        }
//                        setDataLists(data);
//                    }
//                }, new Consumer<Throwable>() {
//                    @Override
//                    public void accept(Throwable throwable) throws Exception {
//
//                    }
//                });
//
//    }
//    /**
//     * 包名是否存在数据库
//     * @param packageName
//     * @return
//     */
//    private AppDataRoomInfo isExit(String packageName, List<AppDataRoomInfo> appDataList){
//        for (int i = 0;i < appDataList.size();i++){
//            if (packageName.equals(appDataList.get(i).getPackageName())){
//                return appDataList.get(i);
//            }
//        }
//        return null;
//    }
//
//    @NonNull
//    @Override
//    public BaseAdapter<ItemAppStoreBinding, AppDataRoomInfo>.BaseViewHolder baseViewHolder(@NonNull ViewGroup parent) {
//        return new ViewHolder(ItemAppStoreBinding.inflate(LayoutInflater.from(getContext()),parent,false));
//    }
//
//    @Override
//    public void bindItemView(@Nullable BaseAdapter<ItemAppStoreBinding, AppDataRoomInfo>.BaseViewHolder holder, int position, AppDataRoomInfo data, int total) {
//
//        holder.setIsRecyclable(false);
//        holder.itemView.setTag(position);
//
//
//        iv_down.setTag(position);
//        iv_down.setVisibility(View.GONE);
//        iv_loading.setVisibility(View.GONE);
//        rl_progress.setVisibility(View.GONE);
//        tv_update.setVisibility(View.GONE);
//        iv_loading.clearAnimation();
//
//        tv_title.setText(data.getName());
//        if (TextUtils.isEmpty(data.getLogoUrl())) {
//            iv_icon.setImageResource(MenuImageUtil.getMainImageId(context, Integer.parseInt(data.getApkUrl())));
//        }else {
//            ImageUtils.setDownloadImageView(context, data.getLogoUrl(), iv_icon);
//        }
//        if (!TextUtils.isEmpty(data.getApkSize())) {
//            tv_version.setText(String.format("v%s / %s", data.getActualVersion(), data.getApkSize()));
//        }
//
//       // AppData first = BlogDao.getBox(AppData.class).query().equal(AppData_.packageName, data.getPackageName()).build().findFirst();
//
//        switch (mHashMap.get(data.getPackageName())) {
//            case HAVE_UPDATE:
//                //有更新
//                tv_update.setVisibility(View.VISIBLE);
//                break;
//            case INSTALLED:
//                //没更新
//                iv_loading.setImageResource(R.drawable.ic_down_end);
//                iv_loading.setVisibility(View.VISIBLE);
//                iv_down.setVisibility(View.GONE);
//                rl_progress.setVisibility(View.GONE);
//                break;
//            case HAVE_DOWN_LOAD:
//                //可下载
//                iv_loading.setVisibility(View.GONE);
//                iv_down.setVisibility(View.VISIBLE);
//                rl_progress.setVisibility(View.GONE);
//                break;
//            case DOWN_LOAD_ING:
//                LogUtils.i("AppStoreAdapter", data.getName() + " 下载中");
//                //下载中
//                rl_progress.setVisibility(View.VISIBLE);
//                iv_loading.setVisibility(View.GONE);
//                iv_down.setVisibility(View.GONE);
//                getdata((FragmentActivity) context, data, rl_progress, progressBar, tv_progress, iv_loading, iv_icon, iv_down,holder.getAdapterPosition());
//                break;
//            case INSTALL:
//                LogUtils.i("AppStoreAdapter", data.getName() + " 安装中");
//                //安装中
//                iv_loading.setImageResource(R.drawable.ic_loading);
//                iv_loading.setVisibility(View.VISIBLE);
//                Animation animation = AnimationUtils.loadAnimation(context, R.anim.rotating_loading);
//                animation.setInterpolator(new LinearInterpolator());
//                iv_loading.setAnimation(animation);
//                getdata((FragmentActivity) context, data, rl_progress, progressBar, tv_progress, iv_loading, iv_icon, iv_down,holder.getAdapterPosition());
//                break;
//        }
//
//        //下载
//        iv_down.setOnClickListener(new OnMultiClickListener() {
//            @Override
//            public void onMultiClick(View v) {
//                if (!getIsHaveLoadnew(context, data)) {
//                    return;
//                }
//                if (StorageUtils.isNoStorage(context)) {
//                    //内存不足
//                    showWindow(context);
//                    return;
//                }
//                iv_down.setVisibility(View.GONE);
//                notifyItemChanged(position);
//                LogUtils.e("isEmpty="+data.getPackageName());
//                if (TextUtils.isEmpty(data.getPackageName())) {//本地的功能模块，比如健康中心，屏保之类下载
//                    LogUtils.e("isEmpty");
//                    isLoading = false;
//                    //已安装
//                    iv_loading.setImageResource(R.drawable.ic_down_end);
//                    iv_loading.clearAnimation();
//                    iv_loading.setVisibility(View.VISIBLE);
//                    mHashMap.put(data.getPackageName(), INSTALLED);
//                    DefaultMenuUtil.add_menu(Integer.parseInt(data.getApkUrl()));
//                }else {
//                    if (!getIsHaveLoad(context, data)) {
//                        return;
//                    }
//                    LogUtils.e("isEmpty1");
//                    DownLoadUtil.getInstance().removeDownLoadListener();
//                    getdata((FragmentActivity) context, data, rl_progress, progressBar, tv_progress, iv_loading, iv_icon, iv_down,position);
//                    DownLoadUtil.getInstance().downLoad(data.getApkUrl(), data.getName(), data.getPackageName());
//                }
//
////            mHashMap.put(data.getPackageName(), DOWN_LOAD_ING);
//            }
//        });
//        //更新
//        tv_update.setOnClickListener(new OnMultiClickListener() {
//            @Override
//            public void onMultiClick(View v) {
//                if (!getIsHaveLoad(context, data)) {
//                    return;
//                }
//                if (StorageUtils.isNoStorage(context)) {
//                    //内存不足
//                    showWindow(context);
//                    return;
//                }
//                tv_update.setVisibility(View.GONE);
//                DownLoadUtil.getInstance().removeDownLoadListener();
//                getdata((FragmentActivity) context, data, rl_progress, progressBar, tv_progress, iv_loading, iv_icon, iv_down,position);
//                DownLoadUtil.getInstance().downLoad(data.getApkUrl(), data.getName(), data.getPackageName());
////              mHashMap.put(data.getPackageName(), DOWN_LOAD_ING);
//
//            }
//        });
//        //取消下载
//        rl_progress.setOnClickListener(new OnMultiClickListener() {
//           @Override
//           public void onMultiClick(View v) {
//               CancelDownLoadWindow window = new CancelDownLoadWindow(context);
//               window.setOnDialogListener(() -> {
//                   //取消下载
//                   isLoading = false;
//                   DownLoadUtil.getInstance().setCancle(true);
//                   rl_progress.setVisibility(View.GONE);
//                   mHashMap.put(data.getPackageName(), HAVE_DOWN_LOAD);
//                   iv_down.setVisibility(View.VISIBLE);
//                   MainApplication.getContext().getAppDataBaseInstance().AppDataRoomDao().queryByData(data.getPackageName())
//                           .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
//                           .subscribe(new MaybeObserver<AppDataRoomInfo>() {
//                               @Override
//                               public void onSubscribe(Disposable d) {
//                                   LogUtils.e("AppDataRoomDao onSubscribe");
//                               }
//
//                               @Override
//                               public void onSuccess(AppDataRoomInfo appDataRoomInfo) {
//                                   if (appDataRoomInfo != null) {
//
//                                       //v1.0.7
//                                       String v2 = appDataRoomInfo.getActualVersion().replaceAll("v", "").replaceAll("\\.", "");
//                                       String v1 = data.getActualVersion().replaceAll("v", "").replaceAll("\\.", "");
//                                       if (!v2.equals(v1)) {
//                                           //有更新
//                                           tv_update.setVisibility(View.VISIBLE);
//                                           mHashMap.put(data.getPackageName(), HAVE_UPDATE);
//                                       } else {
//                                           //没更新
//                                           iv_loading.setImageResource(R.drawable.ic_down_end);
//                                           iv_loading.setVisibility(View.VISIBLE);
//                                           mHashMap.put(data.getPackageName(), INSTALLED);
//                                       }
//                                   }
//                                   progressBar.setProgress(0);
//                                   tv_progress.setText("0%");
//                                   notifyItemChanged(position);
//                               }
//
//                               @Override
//                               public void onError(Throwable e) {
//                                   LogUtils.e("AppDataRoomDao onError");
//
//                               }
//
//                               @Override
//                               public void onComplete() {
//                                   progressBar.setProgress(0);
//                                   tv_progress.setText("0%");
//                                   notifyItemChanged(position);
//                               }
//                           });
//
//               });
//
//               window.showPopupWindow();
//           }
//       });
//    }
//
//    private void showWindow(Context context) {
//        if (mWindow == null) {
//            mWindow = new NotStorageWindow(context);
//        }
//        mWindow.setText(context.getResources().getString(R.string.no_storage_app_store));
//        if (!mWindow.isShowing()) {
//            mWindow.showPopupWindow();
//        }
//    }
//
//    private boolean getIsHaveLoad(Context context, AppDataRoomInfo data) {
//        if (isLoading) {
//            ToastUtils.Companion.showToast(context.getString(R.string.downloading));
//            return false;
//        } else if (!data.getApkUrl().contains(".apk")) {
//            ToastUtils.Companion.showToast(context.getString(R.string.address_is_incorrect));
//            return false;
//        } else if (TextUtils.isEmpty(data.getPackageName())) {
//            ToastUtils.Companion.showToast(context.getString(R.string.no_app));
//            return false;
//        } else {
//            return true;
//        }
//    }
//    private boolean getIsHaveLoadnew(Context context, AppDataRoomInfo data) {
//        if (isLoading) {
//            ToastUtils.Companion.showToast(context.getString(R.string.downloading));
//            return false;
//        }   else {
//            return true;
//        }
//    }
//
//    private void getdata(FragmentActivity context, AppDataRoomInfo dataList, LinearLayout rl_progress,
//                         ProgressBar progressBar, TextView tv_progress, ImageView iv_loading, ImageView iv_icon, ImageView iv_down,int position){
//        LogUtils.e("getdata11="+dataList.getPackageName());
//
//        MainApplication.Companion.getContext().getAppDataBaseInstance().AppDataRoomDao().queryByData(dataList.getPackageName())
//                .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
//                .subscribe(new MaybeObserver<AppDataRoomInfo>() {
//                    @Override
//                    public void onSubscribe(Disposable d) {
//                        LogUtils.e("AppDataRoomDao onSubscribe");
//                    }
//
//                    @Override
//                    public void onSuccess(AppDataRoomInfo appDataRoomInfo) {
//                        LogUtils.e("AppDataRoomDao onSuccess="+ appDataRoomInfo);
//                        setOnDownLoadListener((FragmentActivity) context, dataList, appDataRoomInfo,rl_progress, progressBar, tv_progress, iv_loading, iv_icon, iv_down,position);
//                    }
//
//                    @Override
//                    public void onError(Throwable e) {
//                        LogUtils.e("AppDataRoomDao onError");
//                        setOnDownLoadListener((FragmentActivity) context, dataList, null,rl_progress, progressBar, tv_progress, iv_loading, iv_icon, iv_down,position);
//                    }
//
//                    @Override
//                    public void onComplete() {
//                        LogUtils.e("AppDataRoomDao onComplete");
//                        setOnDownLoadListener((FragmentActivity) context, dataList, null,rl_progress, progressBar, tv_progress, iv_loading, iv_icon, iv_down,position);
//                    }
//                });
//
//
//    }
//    private void setOnDownLoadListener(FragmentActivity context, AppDataRoomInfo dataList,AppDataRoomInfo first, LinearLayout rl_progress,
//                                       ProgressBar progressBar, TextView tv_progress, ImageView iv_loading, ImageView iv_icon, ImageView iv_down,int position) {
//       // AppData first = BlogDao.getBox(AppData.class).query().equal(AppData_.packageName, dataList.getPackageName()).build().findFirst();
//        LogUtils.e("setOnDownLoadListener00");
//        int dataType;//标记当前的数据状态，当失败时设置回更新前的状态
//        if (first != null) {
//            String v2 = first.getActualVersion().replaceAll("v", "").replaceAll("\\.", "");
//            String v1 = dataList.getActualVersion().replaceAll("v", "").replaceAll("\\.", "");
//            if (!v2.equals(v1)) {
//                //有更新
//                dataType = HAVE_UPDATE;
//            } else {
//                dataType = INSTALLED;
//            }
//        } else {
//            dataType = HAVE_DOWN_LOAD;
//        }
//        progressBar.setProgress(mProgress);
//        tv_progress.setText(String.format("%s%%", mProgress));
//        LogUtils.e("setOnDownLoadListener11");
//        //更新或安装
//        DownLoadUtil.getInstance().setOnDownLoadListener(new DownLoadUtil.OnDownLoadListener() {
//            @Override
//            public void onStart() {
//                isLoading = true;
//                isSuccess = false;
//                rl_progress.setVisibility(View.VISIBLE);
//                mHashMap.put(dataList.getPackageName(), DOWN_LOAD_ING);
//                notifyItemChanged(position);
//            }
//
//            @Override
//            public void onLoading(int progress) {
//                if ( rl_progress.getVisibility() == View.GONE){
//                    rl_progress.setVisibility(View.VISIBLE);
//                }
//                mProgress = progress;
//                progressBar.setProgress(mProgress);
//                tv_progress.setText(String.format("%s%%", mProgress));
//                notifyItemChanged(position);
//            }
//
//            @Override
//            public void onComplete(String path) {
//                //下载完成
//                iv_loading.setImageResource(R.drawable.ic_loading);
//                iv_loading.setVisibility(View.VISIBLE);
//                RotateAnimation rotateAnimation = (RotateAnimation) AnimationUtils.loadAnimation(context, R.anim.rotating_loading);
//                rotateAnimation.setInterpolator(new LinearInterpolator());
//                iv_loading.setAnimation(rotateAnimation);
//                rl_progress.setVisibility(View.GONE);
//                mHashMap.put(dataList.getPackageName(), INSTALL);
//                notifyItemChanged(position);
//            }
//
//            @Override
//            public void onFail() {
//                //下载失败
//                if (!isLoading) {
//                    ToastUtils.showToast(context.getString(R.string.app_down_cancel));
//                } else {
//                    ToastUtils.showToast(context.getString(R.string.app_down_error));
//                }
//                isLoading = false;
//                rl_progress.setVisibility(View.GONE);
//                iv_down.setVisibility(View.VISIBLE);
//                mHashMap.put(dataList.getPackageName(), dataType);
//                mProgress = 0;
//                notifyItemChanged(position);
//            }
//
//            @Override
//            public void onCancle() {
//                //下载取消
//                isLoading = false;
//                ToastUtils.showToast(context.getString(R.string.app_down_cancel));
//                rl_progress.setVisibility(View.GONE);
//                iv_down.setVisibility(View.VISIBLE);
//                mHashMap.put(dataList.getPackageName(), dataType);
//                mProgress = 0;
//                notifyItemChanged(position);
//            }
//
//            @Override
//            public void onStartInstallation() {
//                //开始安装
//                iv_loading.setImageResource(R.drawable.ic_loading);
//                iv_loading.setVisibility(View.VISIBLE);
//                mHashMap.put(dataList.getPackageName(), INSTALL);
//                mProgress = 0;
//                notifyItemChanged(position);
//            }
//
//            @Override
//            public void onInstallation() {
//                //安装中
//                iv_loading.setImageResource(R.drawable.ic_loading);
//                iv_loading.setVisibility(View.VISIBLE);
//                mHashMap.put(dataList.getPackageName(), INSTALL);
//                notifyItemChanged(position);
//            }
//
//            @Override
//            public void onInstallationComplete() {
//
//                    isLoading = false;
//                    //已安装
//                    iv_loading.setImageResource(R.drawable.ic_down_end);
//                    iv_loading.clearAnimation();
//                    iv_loading.setVisibility(View.VISIBLE);
//                    mHashMap.put(dataList.getPackageName(), INSTALLED);
//                    //储存到数据库
//                    mProgress = 0;
//                notifyItemChanged(position);
//                    LogUtils.e("下载完成，执行添加到数据11");
//                    ImageUtils.setDownloadImageView(context, dataList.getLogoUrl(), iv_icon);
//                    MainApplication.getContext().getAppDataBaseInstance().AppDataRoomDao().queryByData(dataList.getPackageName())
//                            .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
//                            .subscribe(new MaybeObserver<AppDataRoomInfo>() {
//                                @Override
//                                public void onSubscribe(Disposable d) {
//                                    LogUtils.e("AppDataRoomDao onSubscribe");
//                                }
//
//                                @Override
//                                public void onSuccess(AppDataRoomInfo appDataRoomInfo) {
//                                    LogUtils.e("AppDataRoomDao onSuccess=" + appDataRoomInfo);
//                                    LogUtils.e("下载完成，执行添加到数据12");
//                                    if (appDataRoomInfo != null) {
//                                        //更新
//                                        appDataRoomInfo.setPackageName(dataList.getPackageName());
//                                        appDataRoomInfo.setLogoUrl(dataList.getLogoUrl());
//                                        appDataRoomInfo.setName(dataList.getName().replaceAll(" ", ""));
//                                        appDataRoomInfo.setActualVersion(dataList.getActualVersion());
//                                        appDataRoomInfo.setApkUrl(dataList.getApkUrl());
//                                        // BlogDao.getBox(AppData.class).put(first);
//                                        Completable completable = MainApplication.Companion.getContext().getAppDataBaseInstance().AppDataRoomDao().insert(appDataRoomInfo);
//                                        new CompositeDisposable().add(completable.subscribeOn(Schedulers.io())
//                                                .observeOn(Schedulers.io()).subscribe());//保存数据到room数据库
//                                    }
//                                }
//
//                                @Override
//                                public void onError(Throwable e) {
//                                    LogUtils.e("AppDataRoomDao onError");
//                                    setOnDownLoadListener((FragmentActivity) context, dataList, null, rl_progress, progressBar, tv_progress, iv_loading, iv_icon, iv_down,position);
//                                }
//
//                                @Override
//                                public void onComplete() {
//                                    LogUtils.e("AppDataRoomDao onComplete");
//                                    Completable completable = MainApplication.Companion.getContext().getAppDataBaseInstance().AppDataRoomDao().insert(dataList);
//                                    new CompositeDisposable().add(completable.subscribeOn(Schedulers.io())
//                                            .observeOn(Schedulers.io()).subscribe());//保存数据到room数据库
//                                }
//                            });
//
//
//            }
//
//            @Override
//            public void onInstallationFail() {
//                //安装失败或超时
//                isLoading = false;
//                ToastUtils.Companion.showToast(context.getString(R.string.app_installation_failed));
//                iv_loading.setVisibility(View.GONE);
//                iv_down.setVisibility(View.VISIBLE);
//                iv_loading.clearAnimation();
//                mHashMap.put(dataList.getPackageName(), dataType);
//                mProgress = 0;
//                notifyItemChanged(position);
//            }
//        });
//    }
//    private  long lastClickTime = 0;
//    private  final int CLICK_TIME = 500; //快速点击间隔时间
//
//    // 判断按钮是否快速点击
//    private  boolean isFastClick() {
//        long time = System.currentTimeMillis();
//        if (time - lastClickTime < CLICK_TIME) {//判断系统时间差是否小于点击间隔时间
//            return true;
//        }
//        lastClickTime = time;
//        return false;
//    }
//
//
//
//    private class ViewHolder extends BaseViewHolder{
//        ItemAppStoreBinding mBinding;
//        public ViewHolder(ItemAppStoreBinding binding){
//            super(binding);
//            mBinding = binding;
//        }
//    }
//}